package com.cskaoyan.javase.oop1._8review._1pvz;

/**
 * 用面向对象的思想模拟植物大战僵尸
 * 在这个案例中，我们正常定义public class，将Demo类作为一个测试类
 * 在这个案例中：
 *      对象：xx植物，xx僵尸
 *      类： 植物类（Plant），僵尸类（Zombie）
 *      类是抽取对象共性：
 *      （攻击）植物
 *          属性：血量，攻击力，名字，价格
 *          行为：攻击，被攻击
 *       僵尸
 *          属性：血量，攻击力，名字，移动速度
 *          行为：移动，攻击，被攻击，吃脑子
 *
 *  该案例简单模拟一下实际开发中，对象之间互相交互，完成功能的过程。
 *  在真实开发中，对象会有框架来管理，不需要考虑谁先谁后创建
 *
 * @since 10:55
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 创建僵尸对象
        Zombie z = new Zombie(1000, 100, "铁桶僵尸", 10);
        // 创建植物对象
        Plant p = new Plant(500, 200, "豌豆射手", 100);

        // 互相持有引用，赋值
        p.plantZ = z;
        z.zombieP = p;

        // 对象创建完毕，开始游戏
        System.out.println("Game Start!");
        z.move();
        p.attack();
        int hpZ = z.beAttacked();
        System.out.println("僵尸还剩下" + hpZ + "点血量！");
        System.out.println("僵尸已经靠近植物了！");
        z.attack();
        int hpP = p.beAttacked();
        System.out.println("植物还剩下" + hpP + "点血量！");
        System.out.println("植物牺牲了，僵尸来了！");
        z.eatUBrain();
        System.out.println("GG");
    }
}
